home *** CD-ROM | disk | FTP | other *** search
- #ifndef lint
- static char yysccsid[] = "@(#)yaccpar 1.7 (Berkeley) 09/09/90";
- #endif
- #define YYBYACC 1
- #define YYDEBUG 0
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <alloc.h>
- #include <string.h>
- #include "t_cio.h"
- #include "vector.h"
- #include "t_lex.h"
- #include "bstone_m.h"
- LEX *lex;
- FILE *errlogz=stderr;
- FILE *pvp=stdout;
- int ybdebug=0;
- int load_flag=0;
- int fkt_id;
- POV_OBJ **obj_all;
- static int i,id1,id2,k;
- static DIM_H dm;
- static long n;
- static T_NODE *tn;
- static FT_LOOP *ft;
- static double dd;
- static double *dp;
- static POV_OBJ pv_obj;
- static char pv_line[LSIZE];
- static int n_obj;
- static POV_OBJ *obj_lst[BSIZE];
- static POV_OBJ *pv;
- static VECTOR v;
- static char *ys;
-
- typedef union { double s; double v[3]; T_NODE *t; POV_OBJ *p; } YYSTYPE;
- #define Y_VAL 257
- #define Y_VEC 258
- #define Y_ABS 259
- #define Y_STR 260
- #define Y_END 261
- #define Y_REM 262
- #define Y_GOTO 263
- #define Y_TRACE 264
- #define Y_LET 265
- #define Y_PRINT 266
- #define Y_LIST 267
- #define Y_OBJ 268
- #define Y_V0 269
- #define Y_VX 270
- #define Y_VY 271
- #define Y_VZ 272
- #define Y_LOAD 273
- #define Y_SAVE 274
- #define Y_IF 275
- #define Y_THEN 276
- #define Y_CONT 277
- #define Y_STOP 278
- #define Y_GOSUB 279
- #define Y_RETURN 280
- #define Y_DELETE 281
- #define Y_NUM 282
- #define Y_DIM 283
- #define Y_FOR 284
- #define Y_TO 285
- #define Y_STEP 286
- #define Y_NEXT 287
- #define Y_NEW 288
- #define Y_RUN 289
- #define Y_FKT 290
- #define Y_RND 291
- #define Y_FOPEN 292
- #define Y_FPRINT 293
- #define Y_PLANE 294
- #define Y_BIT 295
- #define Y_BOUND 296
- #define Y_TEX 297
- #define Y_TRANSFORM 298
- #define YYERRCODE 256
- short yylhs[] = { -1,
- 16, 0, 15, 15, 15, 15, 15, 17, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 7, 7,
- 18, 18, 18, 18, 18, 18, 18, 18, 20, 20,
- 23, 23, 23, 23, 21, 21, 24, 24, 24, 24,
- 22, 22, 22, 26, 19, 25, 25, 27, 30, 28,
- 29, 29, 31, 1, 8, 2, 2, 2, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 4, 4, 4,
- 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 13, 13, 9, 9, 9, 10, 10, 10, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 12, 14, 14, 14,
- 14, 14, 14, 14, 14,
- };
- short yylen[] = { 2,
- 0, 2, 0, 1, 1, 1, 1, 0, 5, 4,
- 2, 1, 2, 2, 1, 7, 2, 2, 1, 2,
- 1, 3, 3, 4, 2, 2, 2, 2, 3, 3,
- 1, 2, 2, 2, 2, 3, 3, 2, 0, 2,
- 3, 5, 3, 3, 3, 3, 4, 4, 1, 3,
- 1, 1, 1, 1, 1, 3, 1, 1, 1, 1,
- 0, 1, 3, 0, 2, 1, 2, 3, 0, 4,
- 1, 3, 1, 1, 1, 1, 4, 4, 1, 3,
- 4, 3, 3, 3, 4, 4, 4, 1, 3, 3,
- 1, 3, 3, 3, 3, 2, 2, 2, 3, 4,
- 4, 1, 1, 4, 4, 4, 4, 4, 6, 3,
- 1, 2, 1, 3, 3, 1, 3, 3, 3, 7,
- 1, 2, 2, 4, 1, 1, 1, 1, 4, 4,
- 4, 4, 6, 11, 10, 1, 2, 1, 2, 2,
- 6, 8, 6, 7, 4,
- };
- short yydefred[] = { 1,
- 0, 0, 0, 0, 4, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 6, 5, 0, 15, 0,
- 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 21, 112, 0, 137, 11, 0, 0,
- 0, 0, 0, 103, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 18, 0, 0, 0, 0, 91, 0,
- 0, 116, 121, 102, 0, 20, 51, 54, 52, 53,
- 0, 25, 0, 0, 27, 0, 28, 0, 0, 0,
- 14, 34, 35, 0, 0, 33, 64, 64, 0, 0,
- 17, 13, 32, 57, 60, 58, 59, 26, 0, 64,
- 0, 0, 0, 0, 0, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 97, 96, 122,
- 98, 123, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 138, 0, 0, 0, 0,
- 0, 46, 0, 45, 30, 29, 0, 8, 37, 36,
- 22, 23, 64, 0, 0, 0, 0, 0, 43, 41,
- 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 110, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 119, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 92, 117, 94, 95,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 93, 118, 50, 63, 0, 0, 0, 140,
- 139, 10, 0, 24, 0, 56, 0, 0, 48, 47,
- 68, 100, 101, 129, 130, 105, 131, 106, 132, 107,
- 0, 108, 0, 104, 124, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 42, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 145, 0, 0, 0,
- 109, 133, 0, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 120, 143, 73, 70, 0, 0, 0,
- 141, 40, 0, 0, 0, 144, 0, 0, 0, 72,
- 142, 135, 0, 134,
- };
- short yydgoto[] = { 1,
- 74, 55, 56, 57, 58, 59, 311, 70, 60, 61,
- 62, 63, 64, 164, 33, 2, 243, 34, 35, 72,
- 98, 75, 73, 99, 106, 36, 107, 282, 317, 307,
- 318,
- };
- short yysindex[] = { 0,
- 0, 1659, 0, 0, 0, 0, -264, 1611, 171, 1230,
- 1611, -7, -211, 1291, 1611, 0, 0, -217, 0, 1188,
- -226, -187, -176, 0, 1611, -172, 1274, -165, -159, -149,
- 70, 74, 0, 0, 0, 55, 0, 0, 113, 128,
- 149, 170, 196, 0, 200, 201, -63, 44, 1611, 1428,
- 1611, 1611, 1611, 0, -29, 72, 168, 250, 0, 173,
- 5, 0, 0, 0, -20, 0, 0, 0, 0, 0,
- 173, 0, 205, 211, 0, 1144, 0, 3, 7, -189,
- 0, 0, 0, -9, 8, 0, 0, 0, 16, 219,
- 0, 0, 0, 0, 0, 0, 0, 0, 240, 0,
- 227, 229, 1611, 1611, 1611, 0, 55, 1611, 26, 1326,
- 1391, 1463, 1611, 1611, 0, 1611, 256, 328, 5, 277,
- 281, 291, 301, 302, 1428, 1428, 1611, 0, 0, 0,
- 0, 0, -34, 154, 306, 224, 1611, 1507, 1559, 296,
- 1611, 1611, 1611, 1428, 1428, 1611, 300, 1611, 1611, -26,
- -26, 227, 1230, 1611, 0, 0, 56, 312, 86, 87,
- 250, 0, 234, 0, 0, 0, 82, 0, 0, 0,
- 0, 0, 0, 1611, 1274, 307, -130, -130, 0, 0,
- -30, 0, -12, 176, 326, 334, 185, 335, 217, 338,
- 263, -17, 139, -8, 190, 0, 358, 1611, 1611, 1611,
- 1611, 1611, 1611, 1611, 0, 0, 1611, 1611, 168, 1611,
- 168, 1611, 168, 1611, 250, 250, 0, 0, 0, 0,
- 234, 1611, 5, 5, 341, 342, 344, 346, 349, -26,
- -26, 1611, 0, 0, 0, 0, 1594, 356, 1611, 0,
- 0, 0, 1659, 0, 122, 0, 1611, 163, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1611, 0, 1611, 0, 0, 1611, 361, 393, 72, 72,
- 168, 168, 168, 234, 130, 140, 146, 1611, 1611, 266,
- 375, 385, 162, 388, 0, 1611, 0, 166, 30, 271,
- 401, 1611, 1611, 426, 293, 1611, 0, 403, 1611, 169,
- 0, 0, 1611, 436, -1, 407, 184, 1611, -16, 1611,
- 0, 453, 1611, 0, 0, 0, 0, 412, 421, 1611,
- 0, 0, 1611, 456, 184, 0, 423, 294, 1611, 0,
- 0, 0, 308, 0,
- };
- short yyrindex[] = { 0,
- 0, 465, 114, 80, 0, 0, 0, 0, 0, 0,
- 472, 0, 0, 215, 0, 0, 0, 0, 0, 472,
- 0, 0, 0, 0, 482, 484, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,
- 450, 490, 524, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 39, 699, 822, 558, 0, 0,
- 645, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11, 0, 486, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 487, 0,
- 489, 0, 0, 0, 0, 0, 285, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 41, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 826, 0,
- 856, 0, 895, 0, 684, 718, 0, 0, 0, 0,
- 964, 0, 752, 786, 350, 380, 416, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 465, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 927, 1040,
- 998, 1032, 1077, 1113, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 235, 0, 0, 0, 502,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 464, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- short yygindex[] = { 0,
- -5, -41, -22, 40, 1696, -15, 0, -25, -10, 221,
- -6, 4, 14, 24, 264, 0, 0, 497, 93, 355,
- 340, 106, 0, 0, 406, 0, 0, 0, 191, 0,
- 0,
- };
- #define YYTABLESIZE 2025
- short yytable[] = { 71,
- 62, 97, 54, 135, 69, 31, 205, 135, 135, 80,
- 75, 133, 31, 232, 125, 32, 71, 38, 230, 92,
- 135, 96, 32, 262, 321, 135, 261, 320, 252, 135,
- 87, 88, 264, 49, 128, 129, 131, 231, 74, 151,
- 75, 141, 134, 142, 130, 132, 150, 125, 77, 125,
- 162, 125, 125, 76, 75, 125, 125, 125, 125, 125,
- 314, 125, 251, 181, 81, 163, 183, 135, 89, 90,
- 301, 192, 194, 167, 125, 125, 125, 179, 117, 136,
- 91, 75, 74, 116, 75, 133, 168, 93, 118, 136,
- 238, 100, 163, 136, 136, 237, 37, 184, 180, 187,
- 189, 191, 193, 195, 140, 197, 136, 125, 101, 129,
- 131, 136, 136, 111, 136, 136, 136, 136, 102, 79,
- 136, 136, 136, 136, 136, 86, 136, 217, 219, 220,
- 103, 138, 137, 139, 104, 221, 218, 156, 125, 136,
- 136, 136, 71, 233, 234, 105, 111, 69, 236, 97,
- 111, 111, 108, 136, 111, 111, 111, 111, 111, 248,
- 111, 192, 194, 158, 71, 159, 160, 109, 245, 96,
- 64, 147, 136, 111, 111, 111, 209, 211, 213, 171,
- 172, 148, 263, 149, 269, 270, 147, 267, 110, 187,
- 189, 191, 176, 115, 206, 192, 148, 238, 149, 146,
- 249, 250, 288, 136, 64, 147, 111, 196, 147, 111,
- 141, 274, 142, 284, 146, 148, 253, 149, 148, 289,
- 149, 280, 147, 130, 132, 256, 193, 148, 163, 149,
- 265, 4, 148, 146, 149, 112, 146, 111, 268, 113,
- 114, 287, 40, 225, 226, 227, 31, 152, 153, 271,
- 146, 272, 290, 273, 154, 291, 32, 258, 169, 148,
- 62, 149, 165, 228, 229, 244, 166, 294, 295, 119,
- 306, 48, 173, 309, 125, 170, 148, 125, 149, 174,
- 300, 304, 319, 175, 66, 163, 145, 177, 163, 178,
- 125, 143, 312, 185, 327, 198, 144, 163, 74, 125,
- 125, 74, 324, 260, 322, 148, 206, 149, 148, 163,
- 149, 302, 328, 148, 74, 149, 200, 66, 333, 66,
- 201, 66, 66, 74, 74, 66, 66, 66, 66, 66,
- 202, 66, 305, 265, 332, 148, 148, 149, 149, 136,
- 203, 204, 136, 207, 66, 66, 66, 208, 334, 126,
- 148, 239, 149, 240, 241, 136, 214, 119, 119, 119,
- 222, 119, 119, 242, 136, 136, 254, 247, 223, 224,
- 141, 199, 142, 111, 255, 257, 111, 66, 259, 127,
- 275, 276, 126, 277, 126, 278, 126, 126, 279, 111,
- 126, 126, 126, 126, 126, 283, 126, 186, 111, 111,
- 148, 266, 149, 148, 292, 149, 286, 188, 66, 126,
- 126, 126, 127, 190, 127, 128, 127, 127, 296, 119,
- 127, 127, 127, 127, 127, 297, 127, 3, 4, 298,
- 119, 299, 119, 281, 119, 141, 293, 142, 12, 127,
- 127, 127, 126, 148, 303, 149, 308, 315, 128, 126,
- 128, 316, 128, 128, 310, 325, 128, 128, 128, 128,
- 128, 326, 128, 331, 3, 28, 65, 30, 148, 263,
- 149, 61, 127, 126, 61, 128, 128, 128, 148, 313,
- 149, 12, 126, 31, 126, 49, 55, 126, 38, 127,
- 126, 126, 126, 126, 126, 148, 323, 149, 148, 329,
- 149, 39, 69, 127, 71, 66, 285, 235, 128, 126,
- 126, 126, 182, 119, 246, 330, 0, 0, 0, 0,
- 0, 0, 127, 128, 127, 0, 0, 127, 0, 0,
- 127, 127, 127, 127, 127, 0, 0, 0, 0, 128,
- 0, 0, 126, 0, 66, 0, 0, 66, 0, 127,
- 127, 127, 0, 0, 0, 0, 128, 88, 128, 0,
- 66, 128, 0, 0, 128, 128, 128, 128, 128, 66,
- 66, 0, 0, 126, 0, 0, 0, 0, 0, 0,
- 0, 0, 127, 128, 128, 128, 0, 0, 0, 0,
- 88, 0, 0, 0, 0, 88, 0, 0, 88, 0,
- 88, 88, 88, 0, 0, 0, 0, 0, 0, 126,
- 0, 0, 126, 127, 0, 0, 128, 88, 88, 88,
- 0, 0, 0, 0, 0, 126, 0, 0, 0, 0,
- 0, 0, 0, 0, 126, 126, 0, 0, 0, 127,
- 0, 0, 127, 0, 113, 0, 0, 128, 0, 0,
- 88, 0, 0, 0, 0, 127, 0, 0, 0, 0,
- 0, 0, 0, 0, 127, 127, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 113, 128, 0,
- 0, 88, 113, 89, 0, 113, 0, 113, 113, 113,
- 0, 128, 0, 0, 0, 0, 0, 0, 76, 0,
- 128, 128, 0, 0, 113, 113, 113, 0, 0, 126,
- 0, 0, 126, 0, 0, 0, 89, 90, 0, 0,
- 0, 89, 0, 0, 89, 126, 89, 89, 89, 0,
- 0, 0, 0, 0, 126, 126, 76, 113, 0, 76,
- 0, 0, 76, 89, 89, 89, 0, 0, 0, 127,
- 90, 114, 127, 0, 0, 90, 0, 0, 90, 0,
- 90, 90, 90, 0, 0, 127, 0, 0, 113, 0,
- 0, 0, 0, 0, 127, 127, 89, 90, 90, 90,
- 0, 0, 0, 128, 114, 115, 128, 0, 0, 114,
- 0, 76, 114, 0, 114, 114, 114, 0, 0, 128,
- 0, 0, 0, 0, 0, 0, 0, 89, 128, 128,
- 90, 114, 114, 114, 0, 0, 0, 88, 115, 0,
- 88, 79, 76, 115, 0, 82, 115, 0, 115, 115,
- 115, 0, 0, 88, 0, 0, 0, 0, 0, 0,
- 0, 90, 88, 88, 114, 115, 115, 115, 0, 0,
- 0, 0, 0, 0, 79, 80, 0, 0, 82, 79,
- 0, 0, 79, 82, 0, 79, 82, 0, 0, 82,
- 0, 0, 0, 0, 0, 114, 0, 0, 115, 0,
- 0, 79, 79, 79, 0, 82, 82, 82, 80, 0,
- 0, 0, 0, 80, 84, 0, 80, 0, 0, 80,
- 0, 0, 0, 0, 113, 0, 0, 113, 0, 115,
- 0, 0, 0, 0, 79, 80, 80, 80, 82, 0,
- 113, 0, 0, 0, 0, 0, 77, 84, 0, 113,
- 113, 0, 84, 0, 0, 84, 0, 0, 84, 0,
- 0, 0, 0, 89, 0, 79, 89, 0, 80, 82,
- 0, 0, 0, 0, 84, 84, 84, 0, 76, 89,
- 0, 76, 0, 83, 77, 0, 0, 77, 89, 89,
- 77, 0, 0, 0, 76, 0, 0, 90, 0, 80,
- 90, 0, 0, 76, 76, 0, 0, 84, 0, 0,
- 0, 0, 0, 90, 0, 0, 83, 81, 0, 0,
- 0, 83, 90, 90, 83, 0, 0, 83, 0, 0,
- 0, 114, 0, 0, 114, 0, 0, 0, 84, 77,
- 0, 0, 0, 83, 83, 83, 0, 114, 0, 0,
- 81, 85, 0, 0, 0, 81, 114, 114, 81, 78,
- 0, 81, 0, 0, 0, 115, 0, 0, 115, 0,
- 77, 0, 0, 0, 0, 0, 83, 81, 81, 81,
- 0, 115, 0, 0, 85, 0, 0, 0, 0, 85,
- 115, 115, 85, 0, 0, 85, 86, 78, 0, 0,
- 78, 79, 0, 78, 79, 82, 0, 83, 82, 0,
- 81, 85, 85, 85, 0, 0, 0, 79, 0, 0,
- 0, 82, 0, 0, 0, 0, 79, 79, 0, 86,
- 82, 82, 87, 0, 86, 80, 0, 86, 80, 0,
- 86, 81, 0, 0, 85, 0, 0, 0, 0, 0,
- 0, 80, 78, 0, 0, 0, 86, 86, 86, 0,
- 80, 80, 0, 0, 0, 87, 0, 0, 0, 0,
- 87, 0, 0, 87, 84, 85, 87, 84, 0, 0,
- 0, 0, 0, 78, 0, 0, 0, 0, 0, 86,
- 84, 0, 87, 87, 87, 0, 50, 0, 0, 84,
- 84, 0, 0, 53, 0, 0, 77, 0, 51, 77,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 77, 49, 0, 87, 0, 52, 0, 0,
- 0, 77, 77, 0, 0, 0, 0, 0, 0, 0,
- 50, 0, 0, 83, 0, 0, 83, 53, 0, 0,
- 0, 0, 51, 0, 0, 0, 87, 0, 0, 83,
- 0, 0, 0, 0, 0, 0, 0, 49, 83, 83,
- 0, 52, 0, 0, 0, 0, 0, 81, 0, 0,
- 81, 0, 50, 0, 0, 0, 0, 0, 0, 53,
- 0, 0, 0, 81, 51, 0, 0, 0, 0, 0,
- 0, 0, 81, 81, 0, 0, 0, 0, 0, 49,
- 0, 85, 0, 52, 85, 0, 0, 0, 0, 78,
- 0, 0, 78, 0, 0, 0, 50, 85, 0, 0,
- 0, 0, 0, 53, 0, 78, 85, 85, 51, 0,
- 0, 0, 0, 50, 78, 78, 0, 0, 0, 0,
- 53, 0, 0, 49, 0, 51, 86, 52, 0, 86,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 0, 86, 0, 52, 0, 0, 0, 50, 0,
- 0, 86, 86, 0, 0, 53, 0, 0, 0, 0,
- 51, 0, 87, 0, 0, 87, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 0, 0, 87, 52,
- 0, 0, 0, 0, 0, 0, 0, 87, 87, 0,
- 3, 4, 39, 155, 0, 0, 0, 0, 0, 0,
- 0, 156, 40, 41, 42, 43, 0, 0, 0, 0,
- 0, 0, 0, 50, 0, 44, 0, 0, 0, 0,
- 53, 0, 0, 157, 46, 51, 0, 158, 47, 159,
- 160, 48, 0, 0, 3, 4, 39, 82, 0, 0,
- 49, 0, 0, 0, 52, 83, 40, 41, 42, 43,
- 50, 0, 0, 0, 0, 0, 0, 127, 0, 44,
- 0, 0, 125, 0, 0, 0, 0, 45, 46, 0,
- 0, 0, 47, 84, 85, 48, 3, 4, 39, 67,
- 0, 126, 0, 0, 0, 50, 0, 68, 40, 41,
- 42, 43, 53, 0, 0, 0, 0, 51, 0, 0,
- 0, 44, 0, 0, 0, 0, 0, 0, 0, 45,
- 46, 0, 49, 0, 47, 0, 52, 48, 0, 0,
- 3, 4, 39, 94, 0, 0, 0, 0, 0, 50,
- 0, 95, 40, 41, 42, 43, 53, 3, 4, 39,
- 0, 51, 0, 0, 78, 44, 0, 0, 0, 40,
- 41, 42, 43, 45, 46, 0, 49, 210, 47, 0,
- 52, 48, 44, 0, 0, 0, 0, 0, 0, 0,
- 45, 46, 3, 4, 39, 47, 0, 0, 48, 0,
- 0, 50, 0, 186, 40, 41, 42, 43, 53, 0,
- 0, 0, 0, 51, 0, 0, 0, 44, 0, 0,
- 0, 0, 0, 0, 0, 45, 46, 0, 49, 212,
- 47, 0, 52, 48, 0, 0, 50, 0, 0, 0,
- 0, 0, 0, 53, 0, 0, 0, 0, 51, 0,
- 0, 0, 0, 50, 0, 0, 0, 3, 4, 39,
- 53, 0, 0, 49, 0, 51, 0, 52, 188, 40,
- 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
- 49, 0, 44, 0, 52, 0, 0, 0, 0, 0,
- 45, 46, 0, 0, 3, 47, 39, 0, 48, 0,
- 0, 0, 0, 0, 0, 0, 0, 120, 121, 122,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
- 0, 0, 0, 0, 0, 0, 0, 123, 124, 3,
- 4, 39, 47, 0, 0, 0, 0, 0, 0, 0,
- 190, 40, 41, 42, 43, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 0, 0, 0, 0, 0,
- 0, 0, 45, 46, 0, 0, 0, 47, 0, 0,
- 48, 0, 0, 3, 4, 39, 0, 0, 0, 0,
- 0, 161, 0, 0, 0, 40, 41, 42, 43, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 44, 0,
- 0, 0, 0, 0, 0, 0, 45, 46, 161, 0,
- 0, 47, 0, 0, 48, 161, 161, 161, 0, 0,
- 0, 161, 0, 0, 0, 3, 4, 39, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 40, 41, 42,
- 43, 0, 0, 0, 0, 0, 215, 216, 0, 0,
- 44, 161, 0, 161, 161, 0, 0, 0, 45, 46,
- 3, 4, 39, 47, 0, 0, 48, 0, 0, 0,
- 0, 281, 40, 41, 42, 43, 0, 3, 4, 39,
- 0, 0, 0, 0, 0, 44, 0, 0, 0, 40,
- 41, 42, 43, 45, 46, 0, 0, 0, 47, 0,
- 0, 48, 44, 161, 0, 161, 161, 161, 0, 0,
- 45, 46, 0, 0, 0, 47, 0, 0, 48, 0,
- 0, 0, 0, 0, 0, 3, 4, 161, 0, 5,
- 6, 7, 8, 9, 10, 11, 12, 161, 0, 0,
- 0, 13, 14, 15, 161, 16, 17, 18, 19, 20,
- 0, 21, 22, 0, 0, 23, 24, 25, 0, 0,
- 26, 27, 0, 28, 29, 30, 0, 0, 161, 0,
- 0, 161, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 161, 161, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 161, 0, 0,
- 0, 161, 0, 0, 161, 0, 0, 0, 161, 0,
- 0, 0, 0, 161, 0, 0, 0, 0, 161, 0,
- 0, 0, 0, 0, 0, 161, 0, 0, 161, 0,
- 0, 0, 0, 0, 161,
- };
- short yycheck[] = { 10,
- 0, 27, 8, 38, 10, 2, 41, 38, 38, 15,
- 0, 53, 9, 40, 0, 2, 27, 282, 45, 25,
- 38, 27, 9, 41, 41, 38, 44, 44, 41, 38,
- 257, 258, 41, 60, 50, 51, 52, 64, 0, 35,
- 0, 43, 53, 45, 51, 52, 42, 33, 260, 35,
- 76, 37, 38, 61, 44, 41, 42, 43, 44, 45,
- 62, 47, 93, 105, 282, 76, 108, 38, 295, 257,
- 41, 113, 114, 263, 60, 61, 62, 103, 35, 0,
- 257, 41, 44, 40, 44, 127, 276, 260, 49, 124,
- 35, 257, 103, 124, 124, 40, 4, 108, 104, 110,
- 111, 112, 113, 114, 33, 116, 124, 93, 268, 125,
- 126, 124, 33, 0, 35, 124, 37, 38, 268, 14,
- 41, 42, 43, 44, 45, 20, 47, 143, 144, 145,
- 61, 60, 61, 62, 61, 146, 143, 268, 124, 60,
- 61, 62, 153, 150, 151, 91, 33, 153, 154, 175,
- 37, 38, 40, 124, 41, 42, 43, 44, 45, 290,
- 47, 203, 204, 294, 175, 296, 297, 40, 174, 175,
- 91, 33, 93, 60, 61, 62, 137, 138, 139, 87,
- 88, 43, 44, 45, 207, 208, 33, 198, 40, 200,
- 201, 202, 100, 257, 41, 237, 43, 35, 45, 61,
- 177, 178, 40, 124, 91, 33, 93, 115, 33, 40,
- 43, 222, 45, 239, 61, 43, 41, 45, 43, 261,
- 45, 232, 33, 230, 231, 41, 237, 43, 239, 45,
- 41, 258, 43, 61, 45, 40, 61, 124, 199, 40,
- 40, 247, 269, 270, 271, 272, 243, 268, 44, 210,
- 61, 212, 263, 214, 44, 266, 243, 41, 268, 43,
- 260, 45, 260, 290, 291, 173, 260, 278, 279, 49,
- 296, 298, 257, 299, 260, 268, 43, 263, 45, 61,
- 286, 292, 308, 44, 0, 296, 37, 61, 299, 61,
- 276, 42, 303, 268, 320, 40, 47, 308, 260, 285,
- 286, 263, 313, 41, 310, 43, 41, 45, 43, 320,
- 45, 41, 323, 43, 276, 45, 40, 33, 329, 35,
- 40, 37, 38, 285, 286, 41, 42, 43, 44, 45,
- 40, 47, 293, 41, 41, 43, 43, 45, 45, 260,
- 40, 40, 263, 38, 60, 61, 62, 124, 41, 0,
- 43, 40, 45, 268, 268, 276, 61, 137, 138, 139,
- 61, 141, 142, 282, 285, 286, 41, 61, 148, 149,
- 43, 44, 45, 260, 41, 41, 263, 93, 41, 0,
- 40, 40, 33, 40, 35, 40, 37, 38, 40, 276,
- 41, 42, 43, 44, 45, 40, 47, 268, 285, 286,
- 43, 44, 45, 43, 44, 45, 285, 268, 124, 60,
- 61, 62, 33, 268, 35, 0, 37, 38, 44, 199,
- 41, 42, 43, 44, 45, 41, 47, 257, 258, 268,
- 210, 44, 212, 268, 214, 43, 44, 45, 268, 60,
- 61, 62, 93, 43, 44, 45, 44, 41, 33, 0,
- 35, 268, 37, 38, 286, 44, 41, 42, 43, 44,
- 45, 41, 47, 41, 0, 295, 296, 297, 43, 44,
- 45, 0, 93, 124, 260, 60, 61, 62, 43, 44,
- 45, 0, 33, 0, 35, 0, 0, 38, 0, 0,
- 41, 42, 43, 44, 45, 43, 44, 45, 43, 44,
- 45, 0, 268, 124, 41, 9, 243, 153, 93, 60,
- 61, 62, 107, 293, 175, 325, -1, -1, -1, -1,
- -1, -1, 33, 0, 35, -1, -1, 38, -1, -1,
- 41, 42, 43, 44, 45, -1, -1, -1, -1, 124,
- -1, -1, 93, -1, 260, -1, -1, 263, -1, 60,
- 61, 62, -1, -1, -1, -1, 33, 0, 35, -1,
- 276, 38, -1, -1, 41, 42, 43, 44, 45, 285,
- 286, -1, -1, 124, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, 60, 61, 62, -1, -1, -1, -1,
- 33, -1, -1, -1, -1, 38, -1, -1, 41, -1,
- 43, 44, 45, -1, -1, -1, -1, -1, -1, 260,
- -1, -1, 263, 124, -1, -1, 93, 60, 61, 62,
- -1, -1, -1, -1, -1, 276, -1, -1, -1, -1,
- -1, -1, -1, -1, 285, 286, -1, -1, -1, 260,
- -1, -1, 263, -1, 0, -1, -1, 124, -1, -1,
- 93, -1, -1, -1, -1, 276, -1, -1, -1, -1,
- -1, -1, -1, -1, 285, 286, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 260, -1, 33, 263, -1,
- -1, 124, 38, 0, -1, 41, -1, 43, 44, 45,
- -1, 276, -1, -1, -1, -1, -1, -1, 0, -1,
- 285, 286, -1, -1, 60, 61, 62, -1, -1, 260,
- -1, -1, 263, -1, -1, -1, 33, 0, -1, -1,
- -1, 38, -1, -1, 41, 276, 43, 44, 45, -1,
- -1, -1, -1, -1, 285, 286, 38, 93, -1, 41,
- -1, -1, 44, 60, 61, 62, -1, -1, -1, 260,
- 33, 0, 263, -1, -1, 38, -1, -1, 41, -1,
- 43, 44, 45, -1, -1, 276, -1, -1, 124, -1,
- -1, -1, -1, -1, 285, 286, 93, 60, 61, 62,
- -1, -1, -1, 260, 33, 0, 263, -1, -1, 38,
- -1, 93, 41, -1, 43, 44, 45, -1, -1, 276,
- -1, -1, -1, -1, -1, -1, -1, 124, 285, 286,
- 93, 60, 61, 62, -1, -1, -1, 260, 33, -1,
- 263, 0, 124, 38, -1, 0, 41, -1, 43, 44,
- 45, -1, -1, 276, -1, -1, -1, -1, -1, -1,
- -1, 124, 285, 286, 93, 60, 61, 62, -1, -1,
- -1, -1, -1, -1, 33, 0, -1, -1, 33, 38,
- -1, -1, 41, 38, -1, 44, 41, -1, -1, 44,
- -1, -1, -1, -1, -1, 124, -1, -1, 93, -1,
- -1, 60, 61, 62, -1, 60, 61, 62, 33, -1,
- -1, -1, -1, 38, 0, -1, 41, -1, -1, 44,
- -1, -1, -1, -1, 260, -1, -1, 263, -1, 124,
- -1, -1, -1, -1, 93, 60, 61, 62, 93, -1,
- 276, -1, -1, -1, -1, -1, 0, 33, -1, 285,
- 286, -1, 38, -1, -1, 41, -1, -1, 44, -1,
- -1, -1, -1, 260, -1, 124, 263, -1, 93, 124,
- -1, -1, -1, -1, 60, 61, 62, -1, 260, 276,
- -1, 263, -1, 0, 38, -1, -1, 41, 285, 286,
- 44, -1, -1, -1, 276, -1, -1, 260, -1, 124,
- 263, -1, -1, 285, 286, -1, -1, 93, -1, -1,
- -1, -1, -1, 276, -1, -1, 33, 0, -1, -1,
- -1, 38, 285, 286, 41, -1, -1, 44, -1, -1,
- -1, 260, -1, -1, 263, -1, -1, -1, 124, 93,
- -1, -1, -1, 60, 61, 62, -1, 276, -1, -1,
- 33, 0, -1, -1, -1, 38, 285, 286, 41, 0,
- -1, 44, -1, -1, -1, 260, -1, -1, 263, -1,
- 124, -1, -1, -1, -1, -1, 93, 60, 61, 62,
- -1, 276, -1, -1, 33, -1, -1, -1, -1, 38,
- 285, 286, 41, -1, -1, 44, 0, 38, -1, -1,
- 41, 260, -1, 44, 263, 260, -1, 124, 263, -1,
- 93, 60, 61, 62, -1, -1, -1, 276, -1, -1,
- -1, 276, -1, -1, -1, -1, 285, 286, -1, 33,
- 285, 286, 0, -1, 38, 260, -1, 41, 263, -1,
- 44, 124, -1, -1, 93, -1, -1, -1, -1, -1,
- -1, 276, 93, -1, -1, -1, 60, 61, 62, -1,
- 285, 286, -1, -1, -1, 33, -1, -1, -1, -1,
- 38, -1, -1, 41, 260, 124, 44, 263, -1, -1,
- -1, -1, -1, 124, -1, -1, -1, -1, -1, 93,
- 276, -1, 60, 61, 62, -1, 33, -1, -1, 285,
- 286, -1, -1, 40, -1, -1, 260, -1, 45, 263,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 124, -1, 276, 60, -1, 93, -1, 64, -1, -1,
- -1, 285, 286, -1, -1, -1, -1, -1, -1, -1,
- 33, -1, -1, 260, -1, -1, 263, 40, -1, -1,
- -1, -1, 45, -1, -1, -1, 124, -1, -1, 276,
- -1, -1, -1, -1, -1, -1, -1, 60, 285, 286,
- -1, 64, -1, -1, -1, -1, -1, 260, -1, -1,
- 263, -1, 33, -1, -1, -1, -1, -1, -1, 40,
- -1, -1, -1, 276, 45, -1, -1, -1, -1, -1,
- -1, -1, 285, 286, -1, -1, -1, -1, -1, 60,
- -1, 260, -1, 64, 263, -1, -1, -1, -1, 260,
- -1, -1, 263, -1, -1, -1, 33, 276, -1, -1,
- -1, -1, -1, 40, -1, 276, 285, 286, 45, -1,
- -1, -1, -1, 33, 285, 286, -1, -1, -1, -1,
- 40, -1, -1, 60, -1, 45, 260, 64, -1, 263,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 60, -1, 276, -1, 64, -1, -1, -1, 33, -1,
- -1, 285, 286, -1, -1, 40, -1, -1, -1, -1,
- 45, -1, 260, -1, -1, 263, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 60, -1, -1, 276, 64,
- -1, -1, -1, -1, -1, -1, -1, 285, 286, -1,
- 257, 258, 259, 260, -1, -1, -1, -1, -1, -1,
- -1, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, 282, -1, -1, -1, -1,
- 40, -1, -1, 290, 291, 45, -1, 294, 295, 296,
- 297, 298, -1, -1, 257, 258, 259, 260, -1, -1,
- 60, -1, -1, -1, 64, 268, 269, 270, 271, 272,
- 33, -1, -1, -1, -1, -1, -1, 40, -1, 282,
- -1, -1, 45, -1, -1, -1, -1, 290, 291, -1,
- -1, -1, 295, 296, 297, 298, 257, 258, 259, 260,
- -1, 64, -1, -1, -1, 33, -1, 268, 269, 270,
- 271, 272, 40, -1, -1, -1, -1, 45, -1, -1,
- -1, 282, -1, -1, -1, -1, -1, -1, -1, 290,
- 291, -1, 60, -1, 295, -1, 64, 298, -1, -1,
- 257, 258, 259, 260, -1, -1, -1, -1, -1, 33,
- -1, 268, 269, 270, 271, 272, 40, 257, 258, 259,
- -1, 45, -1, -1, 264, 282, -1, -1, -1, 269,
- 270, 271, 272, 290, 291, -1, 60, 61, 295, -1,
- 64, 298, 282, -1, -1, -1, -1, -1, -1, -1,
- 290, 291, 257, 258, 259, 295, -1, -1, 298, -1,
- -1, 33, -1, 268, 269, 270, 271, 272, 40, -1,
- -1, -1, -1, 45, -1, -1, -1, 282, -1, -1,
- -1, -1, -1, -1, -1, 290, 291, -1, 60, 61,
- 295, -1, 64, 298, -1, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, -1, -1, -1, -1, 45, -1,
- -1, -1, -1, 33, -1, -1, -1, 257, 258, 259,
- 40, -1, -1, 60, -1, 45, -1, 64, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- 60, -1, 282, -1, 64, -1, -1, -1, -1, -1,
- 290, 291, -1, -1, 257, 295, 259, -1, 298, -1,
- -1, -1, -1, -1, -1, -1, -1, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 282,
- -1, -1, -1, -1, -1, -1, -1, 290, 291, 257,
- 258, 259, 295, -1, -1, -1, -1, -1, -1, -1,
- 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 282, -1, -1, -1, -1, -1,
- -1, -1, 290, 291, -1, -1, -1, 295, -1, -1,
- 298, -1, -1, 257, 258, 259, -1, -1, -1, -1,
- -1, 76, -1, -1, -1, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 282, -1,
- -1, -1, -1, -1, -1, -1, 290, 291, 103, -1,
- -1, 295, -1, -1, 298, 110, 111, 112, -1, -1,
- -1, 116, -1, -1, -1, 257, 258, 259, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, 141, 142, -1, -1,
- 282, 146, -1, 148, 149, -1, -1, -1, 290, 291,
- 257, 258, 259, 295, -1, -1, 298, -1, -1, -1,
- -1, 268, 269, 270, 271, 272, -1, 257, 258, 259,
- -1, -1, -1, -1, -1, 282, -1, -1, -1, 269,
- 270, 271, 272, 290, 291, -1, -1, -1, 295, -1,
- -1, 298, 282, 198, -1, 200, 201, 202, -1, -1,
- 290, 291, -1, -1, -1, 295, -1, -1, 298, -1,
- -1, -1, -1, -1, -1, 257, 258, 222, -1, 261,
- 262, 263, 264, 265, 266, 267, 268, 232, -1, -1,
- -1, 273, 274, 275, 239, 277, 278, 279, 280, 281,
- -1, 283, 284, -1, -1, 287, 288, 289, -1, -1,
- 292, 293, -1, 295, 296, 297, -1, -1, 263, -1,
- -1, 266, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 278, 279, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 292, -1, -1,
- -1, 296, -1, -1, 299, -1, -1, -1, 303, -1,
- -1, -1, -1, 308, -1, -1, -1, -1, 313, -1,
- -1, -1, -1, -1, -1, 320, -1, -1, 323, -1,
- -1, -1, -1, -1, 329,
- };
- #define YYFINAL 1
- #ifndef YYDEBUG
- #define YYDEBUG 0
- #endif
- #define YYMAXTOKEN 298
- #if YYDEBUG
- char *yyname[] = {
- "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- "'!'",0,"'#'",0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,
- 0,0,0,0,0,0,0,0,0,"'<'","'='","'>'",0,"'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Y_VAL","Y_VEC","Y_ABS","Y_STR","Y_END",
- "Y_REM","Y_GOTO","Y_TRACE","Y_LET","Y_PRINT","Y_LIST","Y_OBJ","Y_V0","Y_VX",
- "Y_VY","Y_VZ","Y_LOAD","Y_SAVE","Y_IF","Y_THEN","Y_CONT","Y_STOP","Y_GOSUB",
- "Y_RETURN","Y_DELETE","Y_NUM","Y_DIM","Y_FOR","Y_TO","Y_STEP","Y_NEXT","Y_NEW",
- "Y_RUN","Y_FKT","Y_RND","Y_FOPEN","Y_FPRINT","Y_PLANE","Y_BIT","Y_BOUND",
- "Y_TEX","Y_TRANSFORM",
- };
- char *yyrule[] = {
- "$accept : anw",
- "$$1 :",
- "anw : $$1 anwg",
- "anwg :",
- "anwg : Y_END",
- "anwg : Y_STOP",
- "anwg : Y_CONT",
- "anwg : Y_REM",
- "$$2 :",
- "anwg : Y_IF i_expr Y_THEN $$2 anwg",
- "anwg : Y_IF i_expr Y_GOTO Y_NUM",
- "anwg : Y_GOTO Y_NUM",
- "anwg : Y_RUN",
- "anwg : Y_RUN i_expr",
- "anwg : Y_GOSUB Y_NUM",
- "anwg : Y_RETURN",
- "anwg : Y_FOR Y_VAL '=' i_expr Y_TO i_expr f_step",
- "anwg : Y_NEXT Y_VAL",
- "anwg : Y_TRACE i_expr",
- "anwg : Y_NEW",
- "anwg : Y_LET asn_expr",
- "anwg : asn_expr",
- "anwg : Y_DIM Y_VAL dims",
- "anwg : Y_DIM Y_VEC dims",
- "anwg : Y_DIM Y_BIT Y_VAL dims",
- "anwg : Y_PRINT pr_exprs",
- "anwg : Y_FPRINT fp_exprs",
- "anwg : Y_LIST lst_expr",
- "anwg : Y_LOAD Y_STR",
- "anwg : Y_SAVE lst_expr Y_STR",
- "anwg : Y_SAVE Y_TRACE Y_STR",
- "anwg : Y_FOPEN",
- "anwg : Y_FOPEN Y_STR",
- "anwg : Y_DELETE lst_expr",
- "anwg : Y_DELETE Y_STR",
- "anwg : Y_DELETE Y_OBJ",
- "anwg : Y_DELETE Y_TEX Y_OBJ",
- "anwg : Y_DELETE Y_BOUND Y_OBJ",
- "anwg : Y_BOUND Y_OBJ",
- "f_step :",
- "f_step : Y_STEP i_expr",
- "asn_expr : y_val '=' i_expr",
- "asn_expr : Y_BIT Y_VAL dims '=' i_expr",
- "asn_expr : y_vec '=' v_expr",
- "asn_expr : Y_OBJ '=' Y_STR",
- "asn_expr : Y_OBJ '=' y_obj",
- "asn_expr : Y_OBJ '=' v_expr",
- "asn_expr : Y_TEX Y_OBJ '=' y_obj",
- "asn_expr : Y_BOUND Y_OBJ '=' y_obj",
- "pr_exprs : pr_expr",
- "pr_exprs : pr_expr ',' pr_exprs",
- "pr_expr : Y_STR",
- "pr_expr : i_expr",
- "pr_expr : v_expr",
- "pr_expr : Y_OBJ",
- "fp_exprs : fp_expr",
- "fp_exprs : fp_expr ',' fp_exprs",
- "fp_expr : Y_STR",
- "fp_expr : i_expr",
- "fp_expr : v_expr",
- "fp_expr : Y_OBJ",
- "lst_expr :",
- "lst_expr : i_expr",
- "lst_expr : i_expr ',' i_expr",
- "$$3 :",
- "dims : $$3 dimsz",
- "dimsz : dim",
- "dimsz : dim dimsz",
- "dim : '[' i_exprx ']'",
- "$$4 :",
- "obj_set : Y_OBJ ',' $$4 obj_sez",
- "obj_sez : s_obj",
- "obj_sez : s_obj ',' obj_sez",
- "s_obj : Y_OBJ",
- "i_expr : i_exprx",
- "v_expr : v_exprz",
- "i_exprx : i_expry",
- "i_exprx : i_exprx '&' '&' i_expry",
- "i_exprx : i_exprx '|' '|' i_expry",
- "i_expry : i_exprz",
- "i_expry : i_expry '<' i_exprz",
- "i_expry : i_expry '<' '=' i_exprz",
- "i_expry : i_expry '=' i_exprz",
- "i_expry : v_exprz '=' v_exprz",
- "i_expry : i_expry '>' i_exprz",
- "i_expry : i_expry '>' '=' i_exprz",
- "i_expry : i_expry '!' '=' i_exprz",
- "i_expry : v_exprz '!' '=' v_exprz",
- "i_exprz : i_term",
- "i_exprz : i_exprz '+' i_term",
- "i_exprz : i_exprz '-' i_term",
- "i_term : i_faktor",
- "i_term : i_term '*' i_faktor",
- "i_term : v_term '*' v_faktor",
- "i_term : i_term '/' i_faktor",
- "i_term : i_term '%' i_faktor",
- "i_faktor : '-' i_faktor",
- "i_faktor : '!' i_faktor",
- "i_faktor : '@' i_faktor",
- "i_faktor : '(' i_exprx ')'",
- "i_faktor : Y_ABS '(' i_exprx ')'",
- "i_faktor : Y_ABS '(' v_exprz ')'",
- "i_faktor : y_val",
- "i_faktor : Y_NUM",
- "i_faktor : Y_RND '(' i_exprx ')'",
- "i_faktor : Y_VX '(' v_exprz ')'",
- "i_faktor : Y_VY '(' v_exprz ')'",
- "i_faktor : Y_VZ '(' v_exprz ')'",
- "i_faktor : Y_FKT '(' i_exprx ')'",
- "i_faktor : Y_FKT '(' i_exprx ',' i_exprx ')'",
- "i_faktor : Y_BIT Y_VAL dims",
- "y_val : Y_VAL",
- "y_val : Y_VAL dims",
- "v_exprz : v_term",
- "v_exprz : v_exprz '+' v_term",
- "v_exprz : v_exprz '-' v_term",
- "v_term : v_faktor",
- "v_term : i_term '*' v_faktor",
- "v_term : v_term '#' v_faktor",
- "v_faktor : '(' v_exprz ')'",
- "v_faktor : '<' i_exprz ',' i_exprz ',' i_exprz '>'",
- "v_faktor : y_vec",
- "v_faktor : '-' v_faktor",
- "v_faktor : '@' v_faktor",
- "v_faktor : Y_RND '(' v_exprz ')'",
- "v_faktor : Y_V0",
- "v_faktor : Y_VX",
- "v_faktor : Y_VY",
- "v_faktor : Y_VZ",
- "v_faktor : Y_V0 '(' Y_OBJ ')'",
- "v_faktor : Y_VX '(' Y_OBJ ')'",
- "v_faktor : Y_VY '(' Y_OBJ ')'",
- "v_faktor : Y_VZ '(' Y_OBJ ')'",
- "v_faktor : Y_FKT '(' v_exprz ',' v_exprz ')'",
- "v_faktor : Y_TRANSFORM '#' '(' v_exprz ',' v_exprz ',' v_exprz ',' v_exprz ')'",
- "v_faktor : Y_TRANSFORM '(' v_exprz ',' v_exprz ',' v_exprz ',' v_exprz ')'",
- "y_vec : Y_VEC",
- "y_vec : Y_VEC dims",
- "y_obj : Y_OBJ",
- "y_obj : Y_TEX Y_OBJ",
- "y_obj : Y_BOUND Y_OBJ",
- "y_obj : Y_PLANE '(' v_expr ',' v_expr ')'",
- "y_obj : Y_PLANE '(' v_expr ',' v_expr ',' v_expr ')'",
- "y_obj : Y_FKT '(' Y_OBJ ',' v_expr ')'",
- "y_obj : Y_FKT '#' '(' Y_OBJ ',' v_expr ')'",
- "y_obj : Y_FKT '(' obj_set ')'",
- };
- #endif
- #define yyclearin (yychar=(-1))
- #define yyerrok (yyerrflag=0)
- #ifdef YYSTACKSIZE
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH YYSTACKSIZE
- #endif
- #else
- #ifdef YYMAXDEPTH
- #define YYSTACKSIZE YYMAXDEPTH
- #else
- #define YYSTACKSIZE 600
- #define YYMAXDEPTH 600
- #endif
- #endif
- int yydebug;
- int yynerrs;
- int yyerrflag;
- int yychar;
- short *yyssp;
- YYSTYPE *yyvsp;
- YYSTYPE yyval;
- YYSTYPE yylval;
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #define yystacksize YYSTACKSIZE
- int yyerror(char *s)
- {
- fprintf(stderr,"%s : %s\n",yysccsid,s);
- if(errlog!=stderr) fprintf(errlog,"YACC : %s\n",s);
- return(0);
- }
-
- void mkfield(T_NODE *tt, DIM_H *dm, long n)
- {
- DIM_H *dmp;
- T_NODE *tn;
- static char msg[]="DIM array";
- int i; long l;
-
- sprintf(tmp_line,"[]%s",tt->s);
- if((tn=t_symtable(tmp_line))==(T_NODE *)NULL) t_error(msg,-1);
- tt->a=tn;
-
- if(tn->p!=(void *)NULL) free((dmp=(DIM_H *)(tn->p))->f); /* kill field */
- else { tn->p=(void *)(dmp=(DIM_H *)malloc(sizeof(DIM_H)));
- if(dmp==(DIM_H *)NULL) t_error("Dim",1); }
-
- tn->c=B_FLD; dmp->n=dm->n;
- for(i=0;i<dmp->n;i++) dmp->d[i]=dm->d[i];
-
- #ifdef __TURBOC__
- dmp->f=(VEC)farmalloc((unsigned long)(n*sizeof(double)));
- #else
- dmp->f=(VEC)malloc((unsigned long)(n*sizeof(double)));
- #endif
-
-
- if(dmp->f==(VEC)NULL)
- { sprintf(err_msg,"Field %s[%ld] too large.",tt->s,n);
- t_error(err_msg,1); }
- for(l=0L;l<n;l++) *(dmp->f+l)=0;
- dmp->l=n;
- return;
- }
-
- double *get_field(int nn, T_NODE *tnode, DIM_H *dm)
- {
- T_NODE *tn;
- DIM_H *dmp;
- int i; long n,shift;
-
- tn=tnode->a;
- if(tn==(T_NODE *)NULL || (tn->c!=B_FLD))
- { yyerror("not a field"); return(double *)NULL; }
- if(tn->p==(void *)NULL)
- { yyerror("field with unknown dimension"); return(double *)NULL; }
- dmp=(DIM_H *)(tn->p);
-
- if(dm->n!=dmp->n)
- { yyerror("wrong number of indices"); return(double *)NULL; }
- for(i=0,n=0L,shift=1L;i<dm->n;i++)
- { if((dm->d[i] > dmp->d[i]) || (dm->d[i]<=0))
- { yyerror("index out of range"); return(double *)NULL; }
- n+=(dm->d[i]-1)*shift;
- shift*=dmp->d[i];
- }
- id1=(int)(n%(-nn*8));
- if(nn>0) n*=nn; else n=n/(-nn*8);
- if(n>=dmp->l)
- { yyerror("field length mismatch"); return((double *)NULL); }
- tnode->p=(void *)((dmp->f)+n);
- return((VEC)(tnode->p));
- }
-
- double rnd(double r)
- { return( r*(double)(rand()&0X7FFF)/0X8000L ); }
-
-
- POV_OBJ *plane(VECTOR b,VECTOR a)
- {
- vec0(pv_obj.b); vecx(pv_obj.u); vecy(pv_obj.v); vecz(pv_obj.w);
- sprintf(pv_line,"plane { <%G,%G,%G>, %G }",
- a[0],a[1],a[2],dot(a,b)/vecabs(a));
- pv_obj.c=0; pv_obj.s=pv_line;
- pv_obj.tex=pv_obj.bound=(POV_OBJ *)NULL;
- pv_obj.cnt=1;
- return(&pv_obj);
- }
-
- /* Copies p to pv_obj */
- POV_OBJ *cp_tmp(POV_OBJ *p)
- {
- pv_obj.c=p->c; pv_obj.s=p->s;
- pv_obj.tex=p->tex; pv_obj.bound=p->bound;
- pv_obj.cnt=1;
- vecasn(pv_obj.b,p->b);
- vecasn(pv_obj.u,p->u);
- vecasn(pv_obj.v,p->v);
- vecasn(pv_obj.w,p->w);
- return(&pv_obj);
- }
-
- double obj_rad(POV_OBJ *p)
- { double x,y,z;
- x=vecabs(p->u);
- y=vecabs(p->v);
- z=vecabs(p->w);
- return((x+y+z)/3);
- }
-
- /* create right angle vector */
- void vec90(VECTOR rr,VECTOR v)
- {
- int i,k;
- VECTOR r;
-
- for(i=0,k=0; i<3; i++) { r[i]= (v[i]==0) ? 1 : 0; k+=(v[i]==0); }
- if(!k)
- { for(i=0; i<3; i++) r[i]=1/v[i]; r[2]=-2*r[2]; }
- norm(rr,r);
- return;
- }
-
-
- POV_OBJ *ctds(POV_OBJ *p1, POV_OBJ *p2)
- { double dd,r1,r2,a,sa,r,s1,s2;
- VECTOR v,v1,v2,vu,vv,vw,vb;
-
- vecsub(v,p2->b,p1->b);
- r1=obj_rad(p1); r2=obj_rad(p2);
- r=r1-r2;
- if(r==0)
- {
- vecasn(v1,p1->b);
- vecasn(v2,p2->b);
- s1=r1; s2=r2;
- }
- else
- {
- a=vecabs(v);
- if((a==0) || (a<=fabs(r))) return((POV_OBJ *)NULL);
- sa=r/a; /* sinus alpha */
- dd=sqrt(1/(sa*sa)-1);
-
- /* first cone rad: r1*sa*dd */
- /* second cone rad: r2*sa*dd */
- /* first cone point: $3->b+(v)*sa*r1 */
- /* second cone point: $5->b+(v)*sa*r2 */
-
- norm(v,v);
- s1=r1*sa; s2=r2*sa;
- vecscale(v1,s1,v); vecscale(v2,s2,v);
- vecadd(v1,v1,p1->b); vecadd(v2,v2,p2->b);
- s1*=dd; s2*=dd;
- s1=fabs(s1); s2=fabs(s2);
- }
-
- dd= (s1>s2) ? s1 : s2;
- sprintf(pv_line,"cone {<-1,0,0>,%G,<1,0,0>,%G }",s1/dd,s2/dd);
- vecasn(vb,v1);
- vecsub(vu,v2,v1);
- vecscale(vu,0.5,vu);
- vecadd(vb,vb,vu);
- vec90(vv,vu);
- vecprod(vw,vv,vu);
- norm(vw,vw);
- vecscale(vv,dd,vv);
- vecscale(vw,dd,vw);
-
-
- /* vec0(vb); vecx(vu); vecy(vv); vecz(vw); *//* for debugging */
-
- vecasn(pv_obj.b,vb); vecasn(pv_obj.u,vu);
- vecasn(pv_obj.v,vv); vecasn(pv_obj.w,vw);
- pv_obj.c=(char)0; pv_obj.s=pv_line;
- pv_obj.tex=(p1->tex==(POV_OBJ *)NULL) ? p2->tex : p1->tex;
- pv_obj.bound=(POV_OBJ *)NULL;
- pv_obj.cnt=1;
- return(&pv_obj);
- }
- #define YYABORT goto yyabort
- #define YYACCEPT goto yyaccept
- #define YYERROR goto yyerrlab
- int
- yyparse()
- {
- register int yym, yyn, yystate;
- #if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
- #endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
- yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
- #endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
- #ifdef lint
- goto yynewerror;
- #endif
- yynewerror:
- yyerror("syntax error");
- #ifdef lint
- goto yyerrlab;
- #endif
- yyerrlab:
- ++yynerrs;
- yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
- #endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
- #endif
- yychar = (-1);
- goto yyloop;
- }
- yyreduce:
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
- #endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
- case 1:
- { if(ybdebug && !transl_flag)
- {
- if(program_ctr>=0)
- fprintf(errlogz,"* %-6d ",program[program_ctr-1].n);
- else fprintf(errlogz,"* C ");
- fprintf(errlogz,"%s\n",retransl_line(clines));
- }
- }
- break;
- case 2:
- { if(!transl_flag)
- { if(ybdebug==1)
- {
- #ifdef __TURBOC__
- fprintf(stderr,"* %ld Bytes free\n",coreleft());
- #endif
- putc('*',stderr);
- gets(tmp_line); /* TRAP */
- if(tmp_line[0] && (tmp_line[0]!='y') && (tmp_line[0]!='Y'))
- { if(program_ctr>=0) cont_line=program[program_ctr].n;
- program_ctr=-1; }
- }
- /* perform DOS-action */
- #ifdef __MSDOS__
- if(break_en) { putchar('\r'); }
- #endif
- if(break_req)
- { break_req=0;
- if(program_ctr>=0) cont_line=program[program_ctr].n;
- if(program_ctr>=0)
- printf(".. break at line %d\n",cont_line);
- program_ctr=-1; }
- }}
- break;
- case 4:
- { if(!transl_flag) program_ctr=-1; }
- break;
- case 5:
- { if(!transl_flag)
- { if(program_ctr>=0) cont_line=program[program_ctr].n;
- if(program_ctr>=0)
- printf(".. stopped at line %d\n",cont_line);
- program_ctr=-1; }}
- break;
- case 6:
- { if(!transl_flag)
- if(cont_line>=0) program_ctr=search_line(cont_line); }
- break;
- case 7:
- { if(transl_flag)
- { do
- {
- lex=t_lex(NULL,LEX_RCHAR);
- cline[clinep++]=(char)(id1=lex->wert.n.i);
- }
- while((id1!='\n') && (lex->typ!=EOLX));
- clinep-=1;
- lex->typ=EOLN; t_lex(NULL,LEX_PUSH);
- }
- else for(;*(clines+clinep)!=(char)0;clinep++);
- }
- break;
- case 8:
- { if(!transl_flag && !(yyvsp[-1].s))
- for(;*(clines+clinep)!=(char)0;clinep++); }
- break;
- case 10:
- { if(!transl_flag && (yyvsp[-2].s))
- program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p))); }
- break;
- case 11:
- { if(!transl_flag) program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p))); }
- break;
- case 12:
- { if(!transl_flag)
- { gosub_ptr=0; program_ctr=0; }}
- break;
- case 13:
- { if(!transl_flag)
- { gosub_ptr=0;
- program_ctr=search_line((int)(yyvsp[0].s)); }}
- break;
- case 14:
- { if(!transl_flag)
- { if(gosub_ptr>=MAX_LINES/10)
- t_error("Gosub stack overflow.",4);
- if(program_ctr>=0)
- gosub_stack[gosub_ptr++]=program[program_ctr].n;
- else
- gosub_stack[gosub_ptr++]=-1;
- program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p)));
- }}
- break;
- case 15:
- { if(!transl_flag)
- { if(gosub_ptr==0) { yyerror("return without gosub"); YYABORT; }
- i=gosub_stack[--gosub_ptr];
- program_ctr=search_line(i);
- }}
- break;
- case 16:
- { if(transl_flag)
- {
- tn=(yyvsp[-5].t)->a;
- if(tn!=(T_NODE *)NULL)
- if(tn->c!=B_FOR)
- { yyerror("variable unsuitable for loop"); YYABORT; }
- sprintf(tmp_line,"?%s",(yyvsp[-5].t)->s);
- if((tn=t_symtable(tmp_line))==(T_NODE *)NULL)
- t_error("Problem with FOR-loop.",-1);
- if(tn->p==(void *)NULL)
- {
- if((tn->p=(void *)malloc(sizeof(FT_LOOP)))
- ==(void *)NULL) t_error("No memory for loop.",1);
- ft=(FT_LOOP *)(tn->p);
- ft->n=-1; ft->start=0;
- ft->step=1; ft->end=0;
- tn->c=B_FOR;
- }
- (yyvsp[-5].t)->a=tn;
- }
- else /* !transl_flag */
- { tn=(yyvsp[-5].t)->a;
- if((tn==(T_NODE *)NULL) || (tn->c!=B_FOR))
- t_error("Unknown loop, probably array",-1);
- ft=(FT_LOOP *)(tn->p);
- if(program_ctr>0) ft->n=program[program_ctr-1].n+1;
- else { yyerror("FOR outside program"); YYABORT; }
- ft->start=yyvsp[-3].s; ft->step=yyvsp[0].s; ft->end=yyvsp[-1].s;
- *(VEC)((yyvsp[-5].t)->p)=ft->start; }
- }
- break;
- case 17:
- { if(!transl_flag)
- { tn=(yyvsp[0].t)->a;
- if((tn==(T_NODE *)NULL) || (tn->p==(void *)NULL)
- || (tn->c!=B_FOR))
- { yyerror("NEXT without FOR"); YYABORT; }
- ft=(FT_LOOP *)(tn->p);
- if(*(VEC)((yyvsp[0].t)->p)+ft->step <= ft->end)
- { *(VEC)((yyvsp[0].t)->p)+=ft->step;
- program_ctr=search_line(ft->n); }
- if(ybdebug)
- fprintf(errlogz,"* loop %G **\n",*(VEC)(yyvsp[0].t->p));
- }}
- break;
- case 18:
- { if(!transl_flag) ybdebug=(yyvsp[0].s);
- switch(ybdebug)
- {
- case 1: errlogz=stderr; break;
- case 2: errlogz=errlog; break;
- case 3: errlogz=stderr; break;
- }
- }
- break;
- case 19:
- { if(!transl_flag) { new(); program_ctr=-1; }}
- break;
- case 22:
- { if(!transl_flag)
- { for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
- if(n<=0) { yyerror("scalar field dimension <=0"); YYABORT; }
- if(ybdebug)
- fprintf(errlogz,"* s size %ld **\n",n);
- mkfield(yyvsp[-1].t,&dm,n);
- }}
- break;
- case 23:
- { if(!transl_flag)
- { for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
- n*=3;
- if(n<=0) { yyerror("vector field dimension <=0"); YYABORT; }
- if(ybdebug)
- fprintf(errlogz,"* v size %ld **\n",n);
- mkfield(yyvsp[-1].t,&dm,n);
- }}
- break;
- case 24:
- { if(!transl_flag)
- { for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
- if(n<=0) { yyerror("bit field dimension <=0"); YYABORT; }
- n=(n-1)/(8*sizeof(double))+1;
- if(ybdebug)
- fprintf(errlogz,"* b size %ld*%d **\n",n,sizeof(double));
- mkfield(yyvsp[-1].t,&dm,n);
- }}
- break;
- case 25:
- { if(!transl_flag) printf("\n"); }
- break;
- case 26:
- { if(!transl_flag) fprintf(pvp,"\n"); }
- break;
- case 27:
- { if(!transl_flag) {
- for(i=id1,n=0; (i<=id2) && (program[i].n>=0); i++,n++)
- { printf("%-6d# %s\n",program[i].n,
- retransl_line(program[i].s));
- if(n && !(n%20)) gets(tmp_line);
- }
- printf("\n");
- }}
- break;
- case 28:
- { if(!transl_flag)
- { if(flev>=9) t_error("Maximum file depth reached.",4);
- if((fp[++flev]=fopen(((yyvsp[0].t)->s)+1,"r"))==NULL)
- { sprintf(err_msg,"can't open command file: %s",
- ((yyvsp[0].t)->s)+1);
- yyerror(err_msg); flev-=1; YYABORT; }
- load_flag=1; }}
- break;
- case 29:
- { if(!transl_flag)
- if(save_program(id1,id2,((yyvsp[0].t)->s)+1)==NULL)
- { sprintf(err_msg,"can't open save file: %s",((yyvsp[0].t)->s)+1);
- yyerror(err_msg); YYABORT; }
- }
- break;
- case 30:
- { if(!transl_flag)
- { transl_flag=2;
- if(save_program(0,MAX_LINES,((yyvsp[0].t)->s)+1)==NULL)
- { sprintf(err_msg,"can't open save file: %s",((yyvsp[0].t)->s)+1);
- yyerror(err_msg); YYABORT; }
- transl_flag=0;
- }
- }
- break;
- case 31:
- { if(!transl_flag)
- { if(pvp!=stdout) fclose(pvp);
- pvp=stdout;
- }}
- break;
- case 32:
- { if(!transl_flag)
- { if(pvp!=stdout) fclose(pvp);
- if((pvp=fopen(((yyvsp[0].t)->s)+1,"a"))==NULL)
- { sprintf(err_msg,"can't open output file: %s",
- ((yyvsp[0].t)->s)+1);
- yyerror(err_msg); YYABORT; }
- }}
- break;
- case 33:
- { if(!transl_flag)
- for(i=id1; (i<=id2) && (program[id1].n>=0); i++)
- insert_line(program[id1].n, (char *)NULL); }
- break;
- case 34:
- { if(!transl_flag)
- { if(pvp!=stdout) fclose(pvp);
- if((pvp=fopen(((yyvsp[0].t)->s)+1,"w"))==NULL)
- { sprintf(err_msg,"can't open output file: %s",
- ((yyvsp[0].t)->s)+1);
- yyerror(err_msg); YYABORT; }
- }}
- break;
- case 35:
- { if(!transl_flag)
- { free_obj(yyvsp[0].p);
- if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
- }}
- break;
- case 36:
- { if(!transl_flag)
- { del_obj((yyvsp[0].p)->tex); (yyvsp[0].p)->tex=(POV_OBJ *)NULL;
- if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
- }}
- break;
- case 37:
- { if(!transl_flag)
- { del_obj((yyvsp[0].p)->bound); (yyvsp[0].p)->bound=(POV_OBJ *)NULL;
- if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
- }}
- break;
- case 38:
- { if(!transl_flag) {
- bound_obj(yyvsp[0].p); if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz); }}
- break;
- case 39:
- { yyval.s=1; }
- break;
- case 40:
- { yyval.s=yyvsp[0].s; }
- break;
- case 41:
- { if(!transl_flag) *(VEC)((yyvsp[-2].t)->p)=yyvsp[0].s; }
- break;
- case 42:
- { if(!transl_flag)
- {
- dp=get_field(-sizeof(double),yyvsp[-3].t,&dm);
- if(dp==(VEC)NULL) YYABORT;
- id2=id1%(sizeof(int)*8); id1=id1/(sizeof(int)*8);
- i=*((int *)dp+id1);
- k=1; k=k<<id2; i=(yyvsp[0].s!=0) ? i|k : i&~k;
- *((int *)dp+id1)=i;
- }}
- break;
- case 43:
- { if(!transl_flag)
- for(i=0; i<3; i++) *((VEC)((yyvsp[-2].t)->p)+i)=(yyvsp[0].v)[i]; }
- break;
- case 44:
- { if(!transl_flag)
- { pv=yyvsp[-2].p;
- if((pv->c>0) && (pv->s!=(char *)NULL))
- for(ys=pv->s;*ys; ys+=5) del_obj(obj_all[get4hex(ys+1)]);
- pv->c=0;
- if(pv->s!=(char *)NULL) free(pv->s);
- pv->s=cp_str(((yyvsp[0].t)->s)+1);
- if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
- }}
- break;
- case 45:
- { if(!transl_flag)
- { obj_asn(yyvsp[-2].p,yyvsp[0].p);
- if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
- }}
- break;
- case 46:
- { if(!transl_flag) vecasn((yyvsp[-2].p)->b,yyvsp[0].v); }
- break;
- case 47:
- { if (!transl_flag)
- { pv=(yyvsp[-2].p)->tex;
- if(pv!=(POV_OBJ *)NULL) { del_obj(pv); pv=(POV_OBJ *)NULL; }
- (yyvsp[-2].p)->tex=obj_asn(pv,yyvsp[0].p);
- if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
- }}
- break;
- case 48:
- { if (!transl_flag)
- { pv=(yyvsp[-2].p)->bound;
- if(pv!=(POV_OBJ *)NULL) { del_obj(pv); pv=(POV_OBJ *)NULL; }
- (yyvsp[-2].p)->bound=obj_asn(pv,yyvsp[0].p);
- if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
- }}
- break;
- case 51:
- { if(!transl_flag) printf("%s",((yyvsp[0].t)->s)+1); }
- break;
- case 52:
- { if(!transl_flag) printf(" %G",yyvsp[0].s); }
- break;
- case 53:
- { if(!transl_flag)
- printf(" <%G,%G,%G>",(yyvsp[0].v)[0],(yyvsp[0].v)[1],(yyvsp[0].v)[2]); }
- break;
- case 54:
- { if(!transl_flag) print_obj(stdout,yyvsp[0].p); }
- break;
- case 57:
- { if(!transl_flag) fprintf(pvp,"%s ",((yyvsp[0].t)->s)+1); }
- break;
- case 58:
- { if(!transl_flag) fprintf(pvp," %G",yyvsp[0].s); }
- break;
- case 59:
- { if(!transl_flag)
- fprintf(pvp," <%G,%G,%G>",(yyvsp[0].v)[0],(yyvsp[0].v)[1],(yyvsp[0].v)[2]); }
- break;
- case 60:
- { if(!transl_flag) print_obj(pvp,yyvsp[0].p); }
- break;
- case 61:
- { id1=0;id2=MAX_LINES; }
- break;
- case 62:
- { id1=search_line((int)(yyvsp[0].s)); id2=MAX_LINES;}
- break;
- case 63:
- { id1=search_line((int)(yyvsp[-2].s));
- id2=search_line((int)(yyvsp[0].s)); }
- break;
- case 64:
- { dm.n=0; }
- break;
- case 68:
- { if(!transl_flag)
- { if(dm.n>=MAXDIM)
- { sprintf(err_msg,"More than %d dimensions.",MAXDIM);
- t_error(err_msg,4); }
- dm.d[dm.n++]=(long)yyvsp[-1].s;
- if(ybdebug)
- fprintf(errlogz,"* dim [%d] **\n",dm.d[dm.n-1]);
- }}
- break;
- case 69:
- { obj_lst[0]=yyvsp[-1].p; n_obj=1; }
- break;
- case 73:
- { if(!transl_flag)
- { if(n_obj>=BSIZE) t_error("Too many objects",4);
- obj_lst[n_obj++]=yyvsp[0].p; }}
- break;
- case 74:
- { yyval.s=yyvsp[0].s;
- if(ybdebug && !transl_flag)
- fprintf(errlogz,"* scalar %G **\n",yyval.s);
- }
- break;
- case 75:
- { yyval.v[0]=yyvsp[0].v[0]; yyval.v[1]=yyvsp[0].v[1]; yyval.v[2]=yyvsp[0].v[2];
- if(ybdebug && !transl_flag)
- fprintf(errlogz,"* vector <%G,%G,%G> **\n",
- yyval.v[0],yyval.v[1],yyval.v[2]);
- }
- break;
- case 76:
- { yyval.s=yyvsp[0].s; }
- break;
- case 77:
- { yyval.s=((yyvsp[-3].s)&&(yyvsp[0].s)); }
- break;
- case 78:
- { yyval.s=((yyvsp[-3].s)||(yyvsp[0].s)); }
- break;
- case 79:
- { yyval.s=yyvsp[0].s; }
- break;
- case 80:
- { yyval.s=((yyvsp[-2].s)< (yyvsp[0].s)); }
- break;
- case 81:
- { yyval.s=((yyvsp[-3].s)<=(yyvsp[0].s)); }
- break;
- case 82:
- { yyval.s=((yyvsp[-2].s)==(yyvsp[0].s)); }
- break;
- case 83:
- { yyval.s=(((yyvsp[-2].v)[0]==(yyvsp[0].v)[0]) &&
- ((yyvsp[-2].v)[1]==(yyvsp[0].v)[1]) &&
- ((yyvsp[-2].v)[2]==(yyvsp[0].v)[2])); }
- break;
- case 84:
- { yyval.s=((yyvsp[-2].s)> (yyvsp[0].s)); }
- break;
- case 85:
- { yyval.s=((yyvsp[-3].s)>=(yyvsp[0].s)); }
- break;
- case 86:
- { yyval.s=((yyvsp[-3].s)!=(yyvsp[0].s)); }
- break;
- case 87:
- { yyval.s=(((yyvsp[-3].v)[0]!=(yyvsp[0].v)[0]) ||
- ((yyvsp[-3].v)[1]!=(yyvsp[0].v)[1]) ||
- ((yyvsp[-3].v)[2]!=(yyvsp[0].v)[2])); }
- break;
- case 88:
- { yyval.s=yyvsp[0].s; }
- break;
- case 89:
- { yyval.s=((yyvsp[-2].s)+ (yyvsp[0].s)); }
- break;
- case 90:
- { yyval.s=((yyvsp[-2].s)- (yyvsp[0].s)); }
- break;
- case 91:
- { yyval.s=yyvsp[0].s; }
- break;
- case 92:
- { yyval.s=((yyvsp[-2].s)* (yyvsp[0].s)); }
- break;
- case 93:
- { yyval.s=dot(yyvsp[-2].v,yyvsp[0].v); }
- break;
- case 94:
- { if(transl_flag) yyval.s=0;
- else if(yyvsp[0].s!=0) yyval.s=((yyvsp[-2].s)/ (yyvsp[0].s));
- else {
- yyerror("division by zero");
- YYABORT; }}
- break;
- case 95:
- { yyval.s=fmod(yyvsp[-2].s,yyvsp[0].s); }
- break;
- case 96:
- { yyval.s=-(yyvsp[0].s); }
- break;
- case 97:
- { yyval.s=!(yyvsp[0].s); }
- break;
- case 98:
- { yyval.s=(yyvsp[0].s)*M_PI/180; }
- break;
- case 99:
- { yyval.s=yyvsp[-1].s; }
- break;
- case 100:
- { yyval.s=fabs(yyvsp[-1].s); }
- break;
- case 101:
- { yyval.s=vecabs(yyvsp[-1].v); }
- break;
- case 102:
- { yyval.s=*(VEC)((yyvsp[0].t)->p); }
- break;
- case 103:
- { yyval.s=*(VEC)((yyvsp[0].t)->p); }
- break;
- case 104:
- { yyval.s=rnd(yyvsp[-1].s); }
- break;
- case 105:
- { yyval.s=yyvsp[-1].v[0]; }
- break;
- case 106:
- { yyval.s=yyvsp[-1].v[1]; }
- break;
- case 107:
- { yyval.s=yyvsp[-1].v[2]; }
- break;
- case 108:
- { if(!transl_flag) switch(fkt_id)
- { case SIN: yyval.s=sin(yyvsp[-1].s); break;
- case COS: yyval.s=cos(yyvsp[-1].s); break;
- case TAN: dd=cos(yyvsp[-1].s);
- if(dd==0) goto math_err;
- yyval.s=sin(yyvsp[-1].s)/dd; break;
- case ASIN: if((yyvsp[-1].s>1) || (yyvsp[-1].s<-1)) goto math_err;
- yyval.s=asin(yyvsp[-1].s); break;
- case ACOS: if((yyvsp[-1].s>1) || (yyvsp[-1].s<-1)) goto math_err;
- yyval.s=acos(yyvsp[-1].s); break;
- case ATAN: if(2*fabs(yyvsp[-1].s)==M_PI/2) goto math_err;
- yyval.s=atan(yyvsp[-1].s); break;
- case EXP: yyval.s=exp(yyvsp[-1].s); break;
- case LOG: if(yyvsp[-1].s<=0) goto math_err;
- yyval.s=log(yyvsp[-1].s); break;
- case SQRT: if(yyvsp[-1].s<0) goto math_err;
- yyval.s=sqrt(yyvsp[-1].s); break;
- case SQR: yyval.s=yyvsp[-1].s*yyvsp[-1].s; break;
- math_err: yyerror("math error"); YYABORT;
- default: yyerror("wrong scalar->scalar function"); YYABORT;
- }
- else yyval.s=0; }
- break;
- case 109:
- { if(!transl_flag) switch(fkt_id)
- { case POW: yyval.s=pow((yyvsp[-3].s),(yyvsp[-1].s)); break;
- default: yyerror("wrong 2scalar->scalar function"); YYABORT;
- }
- else yyval.s=0;
- }
- break;
- case 110:
- { if(!transl_flag)
- {
- dp=get_field(-sizeof(double),yyvsp[-1].t,&dm);
- if(dp==(VEC)NULL) YYABORT;
- i=*((int *)dp+id1/(sizeof(int)*8));
- yyval.s=(double)((i>>(id1%(sizeof(int)*8)))&1);
- }
- else yyval.s=0;
- }
- break;
- case 111:
- { yyval.t=yyvsp[0].t; }
- break;
- case 112:
- { if(!transl_flag)
- if(get_field(1,yyvsp[-1].t,&dm)==(VEC)NULL) YYABORT;
- yyval.t=yyvsp[-1].t; }
- break;
- case 113:
- { vecasn(yyval.v,yyvsp[0].v); }
- break;
- case 114:
- { vecadd(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
- break;
- case 115:
- { vecsub(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
- break;
- case 116:
- { vecasn(yyval.v,yyvsp[0].v); }
- break;
- case 117:
- { vecmul(yyval.v,yyvsp[-2].s,yyvsp[0].v); }
- break;
- case 118:
- { vecprod(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
- break;
- case 119:
- { vecasn(yyval.v,yyvsp[-1].v); }
- break;
- case 120:
- { (yyval.v)[0]=yyvsp[-5].s; (yyval.v)[1]=yyvsp[-3].s; (yyval.v)[2]=yyvsp[-1].s; }
- break;
- case 121:
- { for(i=0; i<3; i++) yyval.v[i]=*((VEC)((yyvsp[0].t)->p)+i); }
- break;
- case 122:
- { vecneg(yyval.v,yyvsp[0].v); }
- break;
- case 123:
- { vecscale(yyval.v,M_PI/180,yyvsp[0].v); }
- break;
- case 124:
- { for(i=0;i<3;i++) yyval.v[i]=rnd((yyvsp[-1].v)[i]); }
- break;
- case 125:
- { yyval.v[0]=0; yyval.v[1]=0; yyval.v[2]=0; }
- break;
- case 126:
- { yyval.v[0]=1; yyval.v[1]=0; yyval.v[2]=0; }
- break;
- case 127:
- { yyval.v[0]=0; yyval.v[1]=1; yyval.v[2]=0; }
- break;
- case 128:
- { yyval.v[0]=0; yyval.v[1]=0; yyval.v[2]=1; }
- break;
- case 129:
- { vecasn(yyval.v,yyvsp[-1].p->b); }
- break;
- case 130:
- { vecasn(yyval.v,yyvsp[-1].p->u); }
- break;
- case 131:
- { vecasn(yyval.v,yyvsp[-1].p->v); }
- break;
- case 132:
- { vecasn(yyval.v,yyvsp[-1].p->w); }
- break;
- case 133:
- { if(!transl_flag) switch(fkt_id)
- { case ROT: rotxyz(yyval.v,yyvsp[-3].v,yyvsp[-1].v); break;
- case SCA: scale(yyval.v,yyvsp[-3].v,yyvsp[-1].v); break;
- case PER: if((yyvsp[-3].v)[0]==0 && (yyvsp[-3].v)[1]==0 && (yyvsp[-3].v)[2]==0)
- vecasn(yyval.v,yyvsp[-1].v);
- else
- { dd=dist2(yyvsp[-3].v,yyvsp[-1].v); vecscale(yyval.v,dd,yyvsp[-3].v); }
- break;
- default: yyerror("wrong vector->vector function"); YYABORT;
- }
- else yyval.v[0]=yyval.v[1]=yyval.v[2]=0;
- }
- break;
- case 134:
- { if(!transl_flag) transformc(yyval.v,yyvsp[-7].v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v); }
- break;
- case 135:
- { if(!transl_flag)
- { i=transformd(yyval.v,yyvsp[-7].v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v);
- if(!i) { yyerror("transformation impossible"); YYABORT; }
- }}
- break;
- case 136:
- { yyval.t=yyvsp[0].t; }
- break;
- case 137:
- { if(!transl_flag)
- if(get_field(3,yyvsp[-1].t,&dm)==(VEC)NULL) YYABORT;
- yyval.t=yyvsp[-1].t; }
- break;
- case 138:
- { yyval.p=yyvsp[0].p; }
- break;
- case 139:
- { if(!transl_flag)
- if((yyvsp[0].p)->tex!=(POV_OBJ *)NULL) yyval.p=(yyvsp[0].p)->tex;
- else { yyerror("Obj doesn't have a texture"); YYABORT; }
- }
- break;
- case 140:
- { if(!transl_flag)
- if((yyvsp[0].p)->bound!=(POV_OBJ *)NULL) yyval.p=(yyvsp[0].p)->bound;
- else { yyerror("Obj doesn't have a bounding shape"); YYABORT; }
- }
- break;
- case 141:
- { if(!transl_flag) yyval.p=plane(yyvsp[-3].v,yyvsp[-1].v); }
- break;
- case 142:
- { if(!transl_flag)
- { mknormal(v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v);
- yyval.p=plane(yyvsp[-5].v,v);
- }}
- break;
- case 143:
- { if(!transl_flag)
- { pv=cp_tmp(yyvsp[-3].p);
- switch(fkt_id)
- { case SCALE: yyval.p=yscale1(pv,yyvsp[-1].v); break;
- case ROTATE: yyval.p=yrot1(pv,yyvsp[-1].v); break;
- case TRANSLATE: yyval.p=ytransl1(pv,yyvsp[-1].v); break;
- default: yyerror("wrong obj/vec->obj function");
- YYABORT;
- }
- }
- else yyval.p=yyvsp[-3].p;
- }
- break;
- case 144:
- { if(!transl_flag)
- { pv=cp_tmp(yyvsp[-3].p);
- switch(fkt_id)
- { case SCALE: yyval.p=yscale2(pv,yyvsp[-1].v); break;
- case ROTATE: yyval.p=yrot2(pv,yyvsp[-1].v); break;
- case TRANSLATE: yyval.p=ytransl2(pv,yyvsp[-1].v); break;
- default: yyerror("wrong obj/vec->obj function(#)");
- YYABORT;
- }
- }
- else yyval.p=yyvsp[-3].p;
- }
- break;
- case 145:
- { if(!transl_flag) switch(fkt_id)
- { case CTDS:
- if(n_obj<=2)
- { if((yyval.p=ctds(obj_lst[0],obj_lst[1]))==(POV_OBJ *)NULL)
- { yyerror("ctds(2): object contains object");
- YYABORT; }}
- else
- {
- for(i=0;i<n_obj-1;i++)
- { if((pv=ctds(obj_lst[i],obj_lst[i+1]))
- ==(POV_OBJ *)NULL)
- { yyerror("ctds(n): object contains object");
- YYABORT; }
- obj_lst[i]=new_obj();
- if(strlen(pv->s)>=LSIZE-1)
- t_error("Too much dots to connect.",4);
- obj_lst[i]->s=cp_str(pv->s);
- vecasn(obj_lst[i]->b,pv->b);
- vecasn(obj_lst[i]->u,pv->u);
- vecasn(obj_lst[i]->v,pv->v);
- vecasn(obj_lst[i]->w,pv->w);
- }
- n_obj-=1; k=1;
- goto la_csg0;
- }
- break;
- case UNION: k=1; goto la_csg0;
- case SECT: k=2; goto la_csg0;
- case DIFF: k=3; goto la_csg0;
- case ADDOBJ:
- pv=obj_lst[0];
- if(pv->c==0) { k=1; goto la_csg0; }
- add_objz(pv);
- /* pv will be copied !! */
- k=pv->c;
- cp_tmp(pv);
- pv_obj.cnt=-1; pv_obj.c=1;
- pv_obj.s=cp_str(pv->s);
-
- for(i=1;i<n_obj;i++)
- add_obj(&pv_obj,obj_lst[i]);
- goto la_csg1;
-
- la_csg0: /* Adding to empty tmp object */
- vec0(pv_obj.b); vecx(pv_obj.u);
- vecy(pv_obj.v); vecz(pv_obj.w);
- pv_obj.cnt=-1; pv_obj.c=1;
- pv_obj.s=(char *)NULL;
- pv_obj.tex=(POV_OBJ *)NULL;
- pv_obj.bound=(POV_OBJ *)NULL;
-
- for(i=0;i<n_obj;i++)
- add_obj(&pv_obj,obj_lst[i]);
-
- la_csg1: if(pv_obj.s!=(char *)NULL)
- { if(strlen(pv_obj.s)>=LSIZE-1)
- t_error("Too much objects in CSG.",4);
- strcpy(pv_line,pv_obj.s);
- free(pv_obj.s);
- pv_obj.s=pv_line;
- }
- pv_obj.c=k;
- yyval.p=&pv_obj;
- break;
-
- default: yyerror("wrong obj_set->obj function");
- YYABORT;
- }
- else yyval.p=&pv_obj;
- }
- break;
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
- #endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
- #endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
- to state %d\n", *yyssp, yystate);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
- yyerror("yacc stack overflow");
- yyabort:
- return (1);
- yyaccept:
- return (0);
- }
-